import moment from 'moment'

/**
 * 获取指定日期的年份
 * @param {String} date 日期
 */
export function getYear(date) {
	return moment(date ?? undefined).format('YYYY')
}

/**
 * 获取指定日期的月份
 * @param {String} date 日期
 */
export function getMonth(date) {
	return moment(date ?? undefined).format("MM")
}

/**
 * 获取指定日期的天数
 * @param {String} date 日期
 */
export function getDay(date) {
	return moment(date ?? undefined).format("DD")
}

/**
 * 获取指定时间的时间戳(毫秒级)
 * @param {String} dateTime 日期
 */
export function date2Timestamp(dateTime) {
	return moment(dateTime ?? undefined).valueOf()
}

/**
 * 时间戳转日期格式
 * @param {Number||String} timestamp 时间戳
 */
export function timestamp2Date(timestamp, format) {
	if (typeof timestamp === 'string') {
		timestamp = Number(timestamp)
	}
	return moment(timestamp).format(format)
}

/**
 * 获取两个日期的时间差
 * @param {String} startDate 日期
 * @param {String} endDate 日期
 * @param {String} unit 时间差单位 
 */
export function getTimeDiff(startDate, endDate, unit) {
	return moment(endDate).diff(moment(startDate), unit ?? 'days')
}

/**
 * 获取指定日期之后的日期
 * @param {String} date 日期
 * @param {String} diffValue 间隔时间差
 * @param {String} unit 时间单位 
 * @param {String} format 日期格式 
 */
export function getAfterDate(date, diffValue, unit = 'day', format = 'YYYY-MM-DD') {
	return moment(date ?? undefined).add(diffValue, unit).format(format)
}

/**
 * 获取指定日期之前的日期
 * @param {String} date 日期
 * @param {String} diffValue 间隔时间差
 * @param {String} unit 时间单位 
 * @param {String} format 日期格式 
 */
export function getBeforeDate(date, diffValue, unit = 'day', format = 'YYYY-MM-DD') {
	return moment(date ?? undefined).subtract(diffValue, unit).format(format)
}
/**
 * 获取指定日期之前的日期
 * @param {String} date 日期
 * @param {String} diffValue 间隔时间差
 * @param {String} unit 时间单位 
 * @param {String} format 日期格式 
 */
export function getBeforeYear(date, diffValue, unit = 'year', format = 'YYYY') {
	return moment(date ?? undefined).subtract(diffValue, unit).format(format)
}
/**
 * 获取指定日期之前的日期
 * @param {String} date 日期
 * @param {String} diffValue 间隔时间差
 * @param {String} unit 时间单位 
 * @param {String} format 日期格式 
 */
export function getAfterYear(date, diffValue, unit = 'year', format = 'YYYY') {
	return moment(date ?? undefined).add(diffValue, unit).format(format)
}
/**
 * 获取指定日期之前的日期
 * @param {String} date 日期
 * @param {String} diffValue 间隔时间差
 * @param {String} unit 时间单位 
 * @param {String} format 日期格式 
 */
export function getBeforeMonth(date, diffValue, unit = 'month', format = 'YYYY-MM') {
	return moment(date ?? undefined).subtract(diffValue, unit).format(format)
}
/**
 * 获取指定日期之前的日期
 * @param {String} date 日期
 * @param {String} diffValue 间隔时间差
 * @param {String} unit 时间单位 
 * @param {String} format 日期格式 
 */
export function getAfterMonth(date, diffValue, unit = 'month', format = 'YYYY-MM') {
	return moment(date ?? undefined).add(diffValue, unit).format(format)
}

/**
 * 获取第一天
 * @param {String} date 日期
 * @param {String} unit 单位
 * @param {String} format 时间格式化
 */
export function getFirstDay(date, unit = 'month', format = 'YYYY-MM-DD') {
	return moment(date).startOf(unit).format(format)
}

/**
 * 获取最后一天
 * @param {String} date 日期
 * @param {String} unit 单位
 * @param {String} format 时间格式化
 */
export function getLastDay(date, unit = 'month', format = 'YYYY-MM-DD') {
	return moment(date).endOf(unit).format(format)
}